// B 模块 从FIFO读出数据
//.rd_en(rd_en),                // input wire rd_en
//.dout(dout),                  // output wire [15 : 0] dout
//.empty(empty),                // output wire empty
//.almost_empty(almost_empty),  // output wire almost_empty

module read_operate (
    input       wire                clk_50m,
    input       wire                rst_n,
    input       wire                empty,
    input       wire                full,
    input       wire    [15:0]      dout,
    output      reg                 rd_en,
    
    output      reg     [16:0]      sum             //模拟对dout数据的处理
);

     //做一个标志位，当fifo 非空非满 时，标志位为1 ，
    reg flag=0;
    always@(posedge clk_50m or negedge rst_n) begin
        if(rst_n==0)
            flag<=0;
        else if(empty==1'b1)
            flag<=1'b0;         //当fifo 空了，flag 为 0，不空也不满的时候 flag 还继续为 0
        else if(full==1'b1)
            flag<=1'b1;         //当 fifo 满了，flag 为1 ，不满也不空时候，flag 还继续为 1
        else
            flag<=flag;
    end
    
    always@(posedge clk_50m or negedge rst_n ) begin
        if(rst_n==0)
            rd_en<=1'b0;
        else if(flag==1'b1)
            rd_en<=1'b1;            
        else 
            rd_en<=1'b0;
    end
    
    //dout 是从fifo里取出的数据，是想要的数据，也是要进行处理的数据。累加dout数据
    //reg [16:0] sum =0;
    always@(posedge clk_50m or negedge rst_n) begin
        if(rst_n==0) 
            sum<=0;
        else
            sum<=sum + dout;
    end

endmodule
